// 利用 2 个函数对输入的两个分数进行加、减、乘、除四则运
// 算和输出用分数表示的结果。（注：输入格式为：%ld/%ld%c%ld/%ld，输出格式
// 为%ld/%ld），例如：输 入 1/4+1/3，输出：7/12

#include "../esyio.h"

// 分数结构体
typedef struct {
    int num;   // 分子
    int den; // 分母
} Fraction;


// 最大公约数
int gcd(int m, int n) {
    if (m % n == 0) {
        return n;
    }
    return  gcd(n,m%n);
}


// 约分函数
void simplify(Fraction *frac) {
    int com = gcd(frac->num, frac->den);
    frac->num /= com;
    frac->den /= com;
}

// 加法函数
Fraction add(Fraction frac1, Fraction frac2) {
    Fraction result;
    int common = gcd(frac1.den, frac2.den);
    // 计算分母
    result.den = frac1.den * frac2.den / common;
    // 计算分子
    result.num = frac1.num* (frac2.den / common) + frac2.num * (frac1.den / common);
    // 约分
    simplify(&result);
    return result;
}


// 乘法函数
Fraction mul(Fraction frac1, Fraction frac2) {
    Fraction result;
    // 计算分母
    result.den = frac1.den * frac2.den;
    // 计算分子
    result.num = frac1.num * frac2.num ;
    // 约分
    simplify(&result);
    return result;
}


int main() {
    Fraction result = add((Fraction){1,3},(Fraction){1,2});
    PrintInt(result.num);
    PrintInt(result.den);

    
    return 0;
}